package org.ciallo.simplemusicplayer;

import android.app.Application;
import timber.log.Timber;

/**
 * @author Jukomu
 * @Description:
 * @Package: org.ciallo.simplemusicplayer
 * @Project: SimpleMusicPlayer
 * @name: MusicPlayerApplication
 * @Date: 2025/5/27-02:42
 * @Filename: MusicPlayerApplication
 */
public class MusicPlayerApplication extends Application {

    /**
     * 当应用程序创建时调用。
     * 这是进行全局初始化操作的好地方。
     */
    @Override
    public void onCreate() {
        super.onCreate();

        // 初始化 Timber 日志库
        if (BuildConfig.DEBUG) {
            // 如果是调试版本 (通常在 debug build type 中 BuildConfig.DEBUG 为 true)，
            // 则植入一个 DebugTree，它会将日志打印到 Logcat。
            Timber.plant(new Timber.DebugTree() {
                // (可选) 自定义 DebugTree 以包含更多信息，例如方法名和行号
                @Override
                protected @org.jetbrains.annotations.Nullable String createStackElementTag(@org.jetbrains.annotations.NotNull StackTraceElement element) {
                    // 添加类名、方法名和行号到日志标签，方便调试
                    return String.format("C:%s:%s:%s",
                            super.createStackElementTag(element), // 默认标签（通常是类名）
                            element.getMethodName(),              // 方法名
                            element.getLineNumber());             // 行号
                }
            });
            Timber.d("Timber DebugTree planted.");
        } else {
            // 如果是发布版本 (release build type)，
            // 你可以植入一个 ReleaseTree，它可能将重要的日志发送到崩溃报告服务 (如 Firebase Crashlytics)，
            // 或者不执行任何操作以避免在生产环境中输出过多日志。
            // Timber.plant(new ReleaseTree()); // 示例，需要自己实现 ReleaseTree
            Timber.i("Timber ReleaseTree planted (or no-op for release).");
        }

        Timber.i("MusicPlayerApplication onCreate finished.");
    }

    /**
     * (可选) ReleaseTree 示例：
     * 在发布版本中，可以选择只记录特定级别（如警告、错误）的日志，
     * 或者将它们发送到远程日志服务。
     */
    private static class ReleaseTree extends Timber.Tree {
        @Override
        protected void log(int priority, @org.jetbrains.annotations.Nullable String tag, @org.jetbrains.annotations.NotNull String message, @org.jetbrains.annotations.Nullable Throwable t) {
            if (priority == android.util.Log.VERBOSE || priority == android.util.Log.DEBUG) {
                return; // 在发布版中忽略详细和调试日志
            }

            // 对于警告、错误等，可以发送到 Crashlytics 或其他服务
            // FakeCrashLibrary.log(priority, tag, message);
            // if (t != null) {
            //     if (priority == android.util.Log.ERROR) {
            //         FakeCrashLibrary.logError(t);
            //     } else if (priority == android.util.Log.WARN) {
            //         FakeCrashLibrary.logWarning(t);
            //     }
            // }
            // 这里只是一个示例，你需要集成实际的崩溃报告库
        }
    }
}